package org.one.stone.soup.grfxML.plugin.swing;

import java.io.File;

import javax.swing.JFileChooser;

import org.one.stone.soup.grfxML.DataState;
import org.one.stone.soup.grfxML.DataString;
import org.one.stone.soup.grfxML.GrfxMLEngine;
import org.one.stone.soup.grfxML.plugin.SimplePlugin;
import org.one.stone.soup.grfxML.plugin.grfxMLCaster;
import org.one.stone.soup.mjdb.data.field.Field;
import org.one.stone.soup.mjdb.data.field.LockException;

public class JFileFieldPlugin extends SimplePlugin implements Runnable{
	private static final int MESSAGE_ARG = 0;
	private static final int TARGET_ARG = 1;
	private static final int ENTER_ARG = 2;

	private DataString message = new DataString();
	private DataString target = new DataString();
	private DataState enter = new DataState();
/**
 * FileToText constructor comment.
 */
public JFileFieldPlugin(GrfxMLEngine engine) {
	super(engine);
}
/**
 * initialize method comment.
 */
public void initialize() {}
/**
 * process method comment.
 */
public void process()
{
 try{
	if(enter.getValue()==true)
	{
		new Thread(this).start();
		enter.setValue(false,this);
	}
 }catch(LockException le)
 {}
}

public void run()
{
	try{
		JFileChooser chooser = new JFileChooser(target.getValue());
		chooser.showDialog(getEngine().getController().getComponent(),message.getValue());

		File newValue = chooser.getSelectedFile();

		if(newValue!=null)
		{
			target.setValue( newValue.toURL().toString(),this );
		}
	}catch(Exception le)
	{}
}

/**
 * register method comment.
 */
public void register(org.one.stone.soup.mjdb.data.field.DataLinker store)
{
	message = grfxMLCaster.cast(message,getArg(message,MESSAGE_ARG,store));
	target = grfxMLCaster.cast(target,getArg(target,TARGET_ARG,store));
	enter = grfxMLCaster.cast(enter,getArg(enter,ENTER_ARG,store));
}
public void replace(Field oldObj, Field newObj)
{
	message = grfxMLCaster.replace(message,oldObj,newObj);
	target = grfxMLCaster.replace(target,oldObj,newObj);
	enter = grfxMLCaster.replace(enter,oldObj,newObj);
}
/**
 * stop method comment.
 */
public void stop() {}
}
